Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Expansion Panels
The v-expansion-panel
component is useful for reducing vertical space with large amount of information.
With the multiple
prop, the expansion panel can stay open until it’s closed explicitly.
For example, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<div>
<div class="d-flex">
<v-checkbox v-model="disabled" label="Disabled"></v-checkbox>
</div>
<v-expansion-panels v-model="panel" :disabled="disabled" multiple>
<v-expansion-panel>
<v-expansion-panel-header>Panel 1</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
<v-expansion-panel>
<v-expansion-panel-header>Panel 2</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
<v-expansion-panel>
<v-expansion-panel-header>Panel 3</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</div>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
panel: [0, 1],
disabled: false,
readonly: false,
}),
};
</script>
We have the disabled
checkbox to disable the panel when we check it.
Also, we have the v-expansion-panels
to create the expansion panel container
Then v-expansion-panel
component is the expansion panel itself.
The header is displayed and v-expansion-panel-content
is displayed when we click on the heading.
The panel
state is used for v-model
and has the indexes of the panels to open.
Readonly
We can make an expansion panel read-only.
It does the same thing as disabled but doesn’t change the styling.
For example, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<div>
<div class="d-flex">
<v-checkbox v-model="readonly" label="readonly"></v-checkbox>
</div>
<v-expansion-panels v-model="panel" :readonly="readonly" multiple>
<v-expansion-panel>
<v-expansion-panel-header>Panel 1</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
<v-expansion-panel>
<v-expansion-panel-header>Panel 2</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
<v-expansion-panel>
<v-expansion-panel-header>Panel 3</v-expansion-panel-header>
<v-expansion-panel-content>Some content</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</div>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
panel: [0, 1],
readonly: false,
}),
};
</script>
Popout
We can make expansion panels have the popout design.
For example, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<v-expansion-panels popout>
<v-expansion-panel v-for="(item,i) in 5" :key="i">
<v-expansion-panel-header>Item</v-expansion-panel-header>
<v-expansion-panel-content>Lorem ipsum.</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({}),
};
</script>
We just add the popout
prop to make the expanded expansion panel wider than the others.
Conclusion
We can add expansion panels to display vertical content that can be expanded.